package com.atguigu.test6.test61;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @author 路飞
 * @date 2024/4/10 10:48
 * @description 1个字符串中可能包含a-z中的多个字符，字符也可能重复，例如：String data = “aabcexmkduyruieiopxzkkkkasdfjxjdsds”;
 * 写一个程序，对于给定一个这样的字符串求出字符串出现次数最多的那个字母以及出现的次数（若次数最多的字母有多个，则全部求出）
 */
public class Test2 {
    public static void main(String[] args) {
        String data = "aabcexmkduyruieiodpxzkkkkasdfjxjdsd";

        Map<Character, Integer> charMap = new HashMap<>();
        char[] charArray = data.toCharArray();
        for (char c : charArray) {
            if (charMap.containsKey(c)) {
                charMap.put(c, charMap.get(c) + 1);
            } else {
                charMap.put(c, 1);
            }
        }

        System.out.println(charMap);
        // 将map转换为list
        List<Map.Entry<Character, Integer>> charList = new ArrayList<>(charMap.entrySet());
        // 对这个list进行排序，指定排序规则 是按照value来倒序排列的
        Collections.sort(charList, (o1, o2) -> o2.getValue().compareTo(o1.getValue()));

        // 拿到了出现次数最多的一个字符以及对应的次数
        Map.Entry<Character, Integer> max = charList.get(0);
        // 这个list用来存储可能出现相同次数的字符
        List<Map.Entry<Character, Integer>> maxList = new ArrayList<>();

        charList.forEach((element) -> {
            if (Objects.equals(element.getValue(), max.getValue())) {
                maxList.add(element);
            }
        });
        System.out.println(charList);
        System.out.println(maxList);
    }
}
